package logica;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.List;
import java.util.Properties;

import logica.excepciones.ExcepPersistencia;
import logica.valueObjects.VOMascota;
import persistencia.daos.DAOMascotas;
import persistencia.daos.IDAODuenios;
import persistencia.daos.IDAOMascotas;
import persistencia.fabrica.FabricaAbstracta;
import persistencia.poolConexiones.IConexion;

public class Duenio implements Serializable{

	private int cedula;
	private String nombre;
	private String apellido;
	private IDAOMascotas mascotas;
	
	public Duenio(int ced, String nom, String ape) throws RemoteException{
		cedula = ced;
		nombre = nom;
		apellido = ape;
		
		try {
			//obtener info de project.properties
			Properties p = new Properties();
			String nomArch = "properties/project.properties";
			p.load(new FileInputStream(nomArch));
			String nomFabrica = p.getProperty("nomFabrica");
			//
			
			FabricaAbstracta fabrica = (FabricaAbstracta) Class.forName(nomFabrica).newInstance();
			
			
			mascotas = (IDAOMascotas) fabrica.crearDAOMascotas(ced);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public int getCedula(){
		return cedula;
	}
	
	public String getNombre(){
		return nombre;
	}
	
	public String getApellido(){
		return apellido;
	}
	
	public void setCedula(int ced){
		cedula = ced;
	}
	
	public void setNombre(String nom){
		nombre = nom;
	}
	
	public void setApellido(String ape){
		apellido = ape;
	}	
	
	public boolean tieneMascota(IConexion icon, String apodo) throws ExcepPersistencia{
		return mascotas.member(icon, apodo);
	}
	
	public void addMascota(IConexion icon, Mascota mascota) throws ExcepPersistencia{
		mascotas.insert(icon, mascota);
	}
	
	public List<VOMascota> listarMascotas(IConexion icon) throws ExcepPersistencia{
		return mascotas.listarMascotas(icon);
	}
	
	public void borrarMascotas(IConexion icon) throws ExcepPersistencia{
		mascotas.borrarMascotas(icon);
	}

}
